﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Administrador_Clientes_InsertarCliente : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void ButtonIngresar_Click(object sender, EventArgs e)
    {
        try
        {
            //validar los datos
            Validacion validador = new Validacion();
            bool es_valido = true;

            //validar rut///////////////////////////////////////////////////////////////////////////////////

            //ver si los campos no estan vacios
            if (TextBoxRut.Text.Trim().CompareTo("") == 0 &&
                TextBoxDigitoVerificador.Text.Trim().CompareTo("") == 0)
            {
                //si los campos del rut estan vacios no es valido
                es_valido = false;
                LabelMensaje.Text = "Rut o Dígito verificador no pueden ser vacíos.";
                LabelMensaje.Visible = true;
            }

            //ver si los campos corresponden al formato correcto
            //verificar si el rut se puede convertir en int
            if (es_valido == true)
            {//si hay datos, seguir verificando
                string value = TextBoxRut.Text.Trim();
                int number;
                bool res = Int32.TryParse(value, out number);
                if (res == false)
                {//no se puede realizar la conversion
                    es_valido = false;
                    LabelMensaje.Text = "Campo Rut sobrepasa máximo permitido.";
                    LabelMensaje.Visible = true;
                }
            }
            //verificar si el digito verificador se puede convertir en int
            //este campo se verifica como digito o "k" mediente una expresion regular de la vista

            if (es_valido == true)
            {//si paso lo anterior, seguir verificando
                string dig_v = TextBoxDigitoVerificador.Text.ToLower().Trim();
                string dig_r = validador.validaRut(int.Parse(TextBoxRut.Text.Trim()));

                if (dig_r != dig_v)
                {//la validacion del rut ha fallado
                    es_valido = false;
                    LabelMensaje.Text = "Rut no válido.";
                    LabelMensaje.Visible = true;
                }
            }

            //validar nombre//////////////////////////////////////////////////////////////////////////////
            //la existencia de un nombre es validad en la vista

            //validar fono////////////////////////////////////////////////////////////////////////////////

            //ver si el campo es numerico
            if (es_valido == true)
            {//si ha pasado las demas pruebas
                if (TextBoxTelefono.Text.CompareTo("") != 0)
                {//si existe algo dentro del campo
                    string value = TextBoxTelefono.Text.Trim();
                    int number;
                    bool res = Int32.TryParse(value, out number);
                    if (res == false)
                    {//no se puede realizar la conversion
                        es_valido = false;
                        LabelMensaje.Text = "Campo Teléfono sobrepasa máximo permitido.";
                        LabelMensaje.Visible = true;
                    }
                }
                //si el campo es vacío se puede dejar asi (null)
            }

            //validar direccion//////////////////////////////////////////////////////////////////////////////
            //la existencia de una direccion se valida en la vista

            //validar correo
            //correo puede ser nulo, ademas es string, no necesita validacion
            //la vista valida el correo con un prototipo usr@mal.dir


            //insertar operador///////////////////////////////////////////////////////

            if (es_valido == true)
            {//si ha pasado todas las pruebas
                //rescatar datos validados!

                int rut = int.Parse(TextBoxRut.Text.Trim());
                string nombre = TextBoxNombre.Text.Trim();
                int fono = int.Parse(TextBoxTelefono.Text.Trim());
                string direccion = TextBoxDireccion.Text.Trim();
                string correo = TextBoxCorreo.Text.Trim();
                string web = TextBoxWeb.Text.Trim();
                string giro = TextBoxGiro.Text.Trim();
                string tipo = DropDownListTipoCliente.Text.Trim();

                ClienteBLL clientebll = new ClienteBLL();//conexion con modelo

                int filas_afectadas = clientebll.insertarCliente(rut, nombre, fono, direccion, correo, web, giro, tipo);
                if (filas_afectadas == 0)
                {
                    LabelMensaje.Text = "Imposible ingresar cliente.";
                    LabelMensaje.Visible = true;
                }
                else
                {
                    LabelMensaje.Text = "Cliente ingresado exitósamente.";
                    LabelMensaje.Visible = true;
                }
            }


        }
        catch (Exception)
        {
            LabelMensaje.Text = "Error al ingresar cliente, verifique que el cliente no este asociado a un itinerario pendiente o que ya este dentro del sistema.";
            LabelMensaje.Visible = true;
        }
    }
}
